Area-efficient metal-programmable pulse latch design

ABSTRACT

A pulse generator includes a latch module for storing first/second states, a pulse clock module for generating a clock pulse, and a delay module for delaying the clock pulse at a second latch-module input. The latch module has a first latch-module input coupled to a clock, the second latch-module input, and a latch-module output. The pulse clock module has a first pulse-clock-module input coupled to the clock, a second pulse-clock-module input coupled to the latch-module output, and a pulse-clock-module output. The delay module is coupled between the latch-module output and second pulse-clock-module input or between the pulse-clock-module output and second latch-module input. The delay module provides functionally  I 1 I A    at a delay module output, where I 1  is a function of I and I A  is a function of I N0  and B 0 , and where I is a delay module input, B 0  is a first input bit, and I N0  is a first net input.

BACKGROUND

1. Field

The present disclosure relates generally to a pulse latch design, and more particularly, to a pulse generator for a pulse latch.

2. Background

A pulse latch includes a latch and a pulse generator (also referred to as a pulser) for driving the latch. A pulse latch implements flip-flop functionality. A pulse latch may provide substantial advantages in performance and power savings over regular flip-flops. A pulse window generated by the pulse generator should be wide enough to provide a good write-margin for reliably writing into the latch. However, if the pulse window is too wide, the latch will need to have a large hold time. A large hold time of the latch requires additional hold logic within the latch, resulting in a latch that requires more area and consumes more power. Pulse latches should also have a sufficient hold-margin. The hold-margin is the minimum hold time of the pulse latch minus the requisite hold time (due to the width of the pulse window) of the pulse latch. If the hold-margin is insufficient, hold violations may occur in the pulse latch. There is currently a need for a pulse latch that has a good hold-margin and a good write-margin.

SUMMARY

In an aspect of the disclosure, a pulse generator includes a latch module, a pulse clock module, and a delay module. The latch module is configured to store a first state or a second state. The latch module has a first latch-module input, a second latch-module input, and a latch-module output. The first latch-module input is coupled to a clock. The pulse clock module is configured to generate a clock pulse. The pulse clock module has a first pulse-clock-module input, a second pulse-clock-module input, and a pulse-clock-module output. The first pulse-clock-module input is coupled to the clock. The second pulse-clock-module input is coupled to the latch-module output. The delay module is configured to delay the clock pulse at the second latch-module input. The delay module has a delay module input and a delay module output. The delay module is coupled between the latch-module output and the second pulse-clock-module input or between the pulse-clock-module output and the second latch-module input. The delay module is configured to provide functionally I₁I_(A) at the delay module output, where I₁ is a function of I and I_(A) is a function of I_(N0) and B₀, and where I is the delay module input, B₀ is a first input bit, and I_(N0) is a first net input.

In an aspect of the disclosure, a pulse generator includes a latch module, a pulse clock module, and a delay module. The latch module is configured to store a first state or a second state. The latch module has a first latch-module input, a second latch-module input, and a latch-module output. The first latch-module input is coupled to a clock. The pulse clock module is configured to generate a clock pulse. The pulse clock module has a first pulse-clock-module input, a second pulse-clock-module input, and a pulse-clock-module output. The first pulse-clock-module input is coupled to the clock. The second pulse-clock-module input is coupled to the latch-module output. The delay module is configured to delay a signal in order to delay the clock pulse at the second latch-module input. The delay module has a delay module input and a delay module output. The delay module is coupled between the latch-module output and the second pulse-clock-module input or between the pulse-clock-module output and the second latch-module input. The delay module includes at least two delay paths configured to delay the clock pulse to the second latch-module input, and one or more logic gates configured to change a state of the delay module output after the signal has propagated through each of the at least two delay paths to the one or more logic gates. The state of the delay module output is a function of each of the at least two delay paths.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1A is a diagram illustrating a pulse latch.

FIG. 1B is a diagram illustrating a pulse generator.

FIG. 1C is a diagram illustrating a functional timing diagram of the pulse generator of FIG. 1B.

FIG. 2A is a diagram illustrating a first exemplary pulse generator.

FIG. 2B is a diagram illustrating a second exemplary pulse generator.

FIG. 3 is a diagram illustrating a first exemplary delay module.

FIG. 4 is a diagram illustrating a second exemplary delay module.

DETAILED DESCRIPTION

The detailed description set forth below in connection with the appended drawings is intended as a description of various configurations and is not intended to represent the only configurations in which the concepts described herein may be practiced. The detailed description includes specific details for the purpose of providing a thorough understanding of various concepts. However, it will be apparent to those skilled in the art that these concepts may be practiced without these specific details. In some instances, well known structures and components are shown in block diagram form in order to avoid obscuring such concepts. Apparatuses and methods will be described in the following detailed description and may be illustrated in the accompanying drawings by various blocks, modules, components, circuits, steps, processes, algorithms, elements, etc.

As discussed supra, a pulse latch implements flip-flop functionality and includes a latch and a pulse generator for driving the latch. A pulse window generated by the pulse generator should be wide enough to provide a good write-margin for reliably writing into the latch. However, if the pulse window is too wide, the latch will need to have a large hold time. A large hold time of the latch requires additional hold logic within the latch, resulting in a latch that requires more area and consumes more power. Pulse latches should also have a sufficient hold-margin. The hold-margin is the minimum hold time of the pulse latch minus the requisite hold time (due to the width of the pulse window) of the pulse latch. If the hold-margin is insufficient, hold violations may occur in the pulse latch. In a digital signal processor (DSP), utilizing pulse latches may save 6% block level dynamic power compared to regular flop trays. In a modem, utilizing pulse latches may provide a 5% power benefit. To match pulse latch performance, a regular latch/flip-flop may need to be 1.5 times larger in area than a corresponding pulse latch. With the rapidly changing manufacturing process technologies (e.g., planar and fin field effect transistor (FinFet) technologies), deterministic and bounded design of a pulsed latch is crucial for achieving an aggressive time-to-market.

Due to new process technologies and manufacturing variations, achieving both good hold-margin and write-margin (also referred to as writability) is difficult. Accordingly, achieving both good hold-margin and write-margin may result in a longer yield ramp-up time for volume system on a chip (SoC) production, and may impact time-to-market product delivery. A conservative design of the pulse latch (with excellent hold-margin and write-margin) may increase the area of the pulse latch and the power consumption. Without a sufficiently sized pulse width, the writability into the latch is not guaranteed across expected process, voltage, and temperature (PVT) variations. In order to provide a good write/hold margins, a pulse generator for a pulse latch is provided infra with a metal-programmable delay module for adjusting a pulse width of the pulse generator. Through an engineering change order (ECO) (to modify one or more metal layers in one or more masks) and/or input signals, the pulse generator may be configured to generate wider/narrower pulses.

FIG. 1A is a diagram illustrating a pulse latch 100. As shown in FIG. 1, a pulse latch 104 includes a latch 104 and a pulse generator 102 for driving the latch 104. The pulse generator 102 receives a clock (clk) input and outputs a pulse clock (pclk) to the latch 104. When the pulse clock (pclk) goes from high to low, the latch 104 is configured to output a latched state q, and to latch/store a new input state d. The pulse window of the pulse clock (pclk) should be sufficiently wide to allow for state d to be received as input during the pulse window. However, if the pulse window is too wide, the latch will need a large hold time for holding the state d until the pulse clock (pclk) goes low.

FIG. 1B is a diagram illustrating a pulse generator 120. The pulse generator 120 of FIG. 1B is the pulse generator 102 of FIG. 1A. The pulse generator 120 includes a set-reset (SR) latch 122, an AND gate 124, and a delay module 126. The SR latch 122 has an inverted set (S) input, a reset (R) input, and an output (Q). A clock (clk) is input to the inverted set (S) input and the AND gate 124. The output (Q) is also input to the AND gate 124. The AND gate 124 generates a pulse clock (pclk), which is input to the delay module 126. The delay module 126 may include one or more delay cells, such as buffers connected in series, or specifically, an even number of inverters connected in series. An output of the delay module 126 is connected to the reset (R) input.

FIG. 1C is a diagram illustrating a functional timing diagram 140 of the pulse generator 120 of FIG. 1B. As shown in FIG. 1C, before t₀, the clock (clk) is low, the set (S) input is high, and the output (Q) is high. As such, the pulse clock (pclk) is low and the reset (R) input is low. At t₀, the clock (elk) starts to go high, causing the set (S) input to go low. At t₁, the pulse clock (pclk) then starts to go high as the clock (elk) propagates through the AND gate 124. At t₂, the clock (elk) is high and the set (S) input is low. At t₃, the pulse clock (pclk) is also high. At t₄, the pulse clock (pclk) propagates through the delay module 126, causing the reset (R) input to start to go high. At t₅, the reset (R) input causes the output (Q) to start to go low. At t₆, the reset (R) input is high and, as a result of the output (Q) going low, the pulse clock (pclk) starts to go low. At t₇, the output (Q) is low. At t₈, the pulse clock (pclk) is low. At t₉, the pulse clock (pclk) propagates through the delay module 126, causing the reset (R) input to start to go low. At t₁₀, the reset (R) input is low. At t₁₁, the clock (clk) starts to go low, causing the set (S) input to go high, and thereafter at t₁₂, the rising set (S) input causes the output (Q) to start to go high. At t₁₃, the states are the same as before t₀, with the clock (elk) low, the set (S) input high, the output (Q) high, the pulse clock (pclk) low, and the reset (R) input low. The pulse window 142 of the pulse clock (pclk) is shown between t₃ and t₆. The time between t₁ (rising edge of the pulse clock (pclk)) and t₄ (rising edge of the reset (R) input) determines a width of the pulse window 142. As such, by adjusting the delay through the delay module 126, a width of the pulse window 142 may be adjusted.

FIG. 2A is a diagram illustrating a first exemplary pulse generator 200. The first exemplary pulse generator 200 includes an SR latch 202 with an inverted set (S) input, a reset (R) input, and an output (Q). A clock (elk) is input to the inverted set (S) input of the SR latch 202 and to an AND gate 204. The output (Q) is also input to the AND gate 204. An output of the AND gate 204 is a pulse clock (pclk). The pulse clock (pclk) is input to a delay module 206, which includes a set of delay elements/cells 208 and 210 connected in series. The delay element 208 is functionally an inverter, and may be the delay element shown infra with respect to FIG. 3 or FIG. 4. The delay element 210 is an inverter. An output of the inverter 210 is connected to the reset (R) input. The pulse clock (pclk) may be used to drive a latch in a pulse latch configuration.

FIG. 2B is a diagram illustrating a second exemplary pulse generator 250. The second exemplary pulse generator 250 includes an SR latch 252 with an inverted set (S) input, a reset (R) input, and an inverted output (Q). A clock (elk) is input to the inverted set (S) input of the SR latch 252 and to an AND gate 254. The output (Q) is input to a delay element 256. An output of the delay element is also input to the AND gate 204. An output of the AND gate 204 is a pulse clock (pclk). The pulse clock (pclk) is input to the reset (R) input. The delay element 256 is functionally an inverter, and may be the delay element shown infra with respect to FIG. 3 or FIG. 4. The pulse clock (pclk) may be used to drive a latch in a pulse latch configuration.

FIG. 3 is a diagram illustrating a first exemplary delay module 300. The delay module 300 includes a two-input NAND gate 302 with two inputs and an output out. A first input receives input in, which is coupled to the pulse clock (pclk). A second input receives input in+bit₀ through a NOR gate 304 and an inverter 306 (the symbol “+” is an OR operation, and is the same as V). The NOR gate 304 has inputs I_(N0) and bit₀. The net input I_(N0) (also referred to as branch net) of the NOR gate 304 is connected to input in. An output of the NOR gate 304 is connected to an input of the inverter 306. An output of the inverter 306 is connected to the second input of the NAND gate 302.

The delay module 300 delays a rising input in at the output out based on whether input bit₀ is set high or low. The delay between falling input in and the output out does not vary based on input bit₀. Assuming each gate 302, 304, 306 has a delay of d_(G), for falling input in, the propagation delay is approximately d_(G) (through gate 302). For rising input in, the propagation delay is approximately d_(G) when input bit₀ is set to high (1), and is 3d_(G) when input bit₀ is set to low (0).

By default, the input bit₀ may be set to low (0) to provide a better write-margin for the pulse latch. However, if there are hold violations with the wider pulse width, the input bit₀ may be set to high (1) in order to narrow the pulse width and to provide a better hold-margin and fewer hold violations. Once sufficient write/hold margins are established with a particular configuration for the input bit₀, the configuration of the input bit₀ may be fixed so that the delay module 300 provides a delay of approximately d_(G) or 3d_(G) for rising input in during a functional mode. The additional delay net for input bit₀ increases the clock power of the delay module 300. When only a delay of approximately d_(G) is needed for rising input in, to save clock power, the net input I_(N0) 308 may be disconnected from input in, and both inputs I_(N0), bit₀ to the NOR gate 304 may be tied to high (1) through an ECO. The ECO allows for a mask change with one or more metal layers in association with the metal interconnects for the net input I_(N0) and the input bit₀ connected to the inputs of the NOR gate 304. Thereafter, with the updated mask, an SoC may be fabricated without a connection of the net input I_(N0) to the input in.

FIG. 4 is a diagram illustrating a second exemplary delay module 400. The delay module 400 includes a three-input NAND gate 402 with three inputs and an output out. A first input receives input in, which is coupled to the pulse clock (pclk). A second input receives input in+bit₀ through a NOR gate 404 and an inverter 406. The NOR gate 404 has inputs I_(N0) and bit₀. The net input I_(N0) of the NOR gate 404 is connected to input in. An output of the NOR gate 404 is connected to the inverter 406. An output of the inverter 406 is connected to the second input of the NAND gate 402. A third input receives input in+bit₀+bit₁ through a NOR gate 408 and an inverter 410. The NOR gate 408 has inputs I_(N1) and bit₁. The net input I_(N1) of the NOR gate 408 is connected to input in+bit₀. An output of the NOR gate 408 is connected to an input of the inverter 410. An output of the inverter 410 is connected to the third input of the NAND gate 402.

The delay module 400 delays a rising input in at the output out based on whether input bit₀ and input bit₁ are set high or low. The delay between falling input in and the output out does not vary based on input bit₀ and input bit₁. Assuming each gate 402, 404, 406, 408, 410 has a delay of d_(G), for falling input in, the propagation delay is approximately d_(G) (through gate 402). For rising input in, the propagation delay is approximately d_(G) when input bit₀ is set to high (1) (when input bit₀ is set to high (1), it does not matter how input bit₁ is set); 3d_(G) when input bit₀ is set to low (0) and input bit₁ is set to high (1); and 5d_(G) when both input bit₀ and input bit₁ are set to low (0).

By default, the input bit₀ may be set to low (0) and the input bit₁ may be set to high (1) to provide baseline write/hold margins for the pulse latch. If there are writability issues with the pulse latch in the default setting, the pulse width may be widened by setting the input bit₁ to low (0). The wider pulse width increases the write-margin and may allow the pulse latch to function with fewer writability errors. If there are hold violation issues with the pulse latch in the default setting, the pulse width may be narrowed by setting the input bit₀ to high (1). The narrower pulse width increases the hold-margin and may allow the pulse latch to function with fewer hold violations. Once sufficient write/hold margins are established (so that there are no writability errors and hold violations) with a particular configuration for the input bit₀ and the input bit₁, the configuration of the input bit₀ and the input bit₁ may be fixed so that the delay module 400 provides a delay of approximately d_(G), 3d_(G), or 5d_(G) for rising input in during a functional mode. The additional delay nets for input bit₀ and input bit₁ increases the clock power of the delay module 400. When only a delay of approximately d_(G) or 3d_(G) are needed for rising input in, to save clock power, the net input I_(N1) 414 may be disconnected from input in+bit₀, and both inputs I_(N1), bit₁ to the NOR gate 408 may be tied to high (1) through an ECO. In such a configuration, if a delay of approximately d_(G) is needed, bit₀ may be set to high (1), and if a delay of approximately 3d_(G) is needed, bit₀ may be set to low (0). However, when only a delay of approximately d_(G) is needed for rising input in, to save clock power (e.g., 3%), through an ECO, the net input I_(N0) 412 may be disconnected from input in, and the inputs I_(N0), bit₀, and bit₁ may be tied to high (1). As discussed supra, the ECO allows for a mask change with one or more metal layers in association with the metal interconnects for the net input I_(N0), the net input I_(N1), the input bit₀, and the input bit₁. Thereafter, with the updated mask, an SoC may be fabricated without a connection of the net input I_(N0) to the input in and/or the net input I_(N1) to the input in+bit₀.

Referring again to FIGS. 2A, 2B, 3, and 4, a pulse generator 200/250 includes a latch module 202/252, a pulse clock module 204/254, and a delay module 206/256. The latch module 202/252 is configured to store a first state (e.g., low (0)) or a second state (e.g., high (1)). The latch module 202/252 has a first latch-module input S, a second latch-module input R, and a latch-module output Q. The first latch-module input S is coupled to a clock clk. The pulse clock module 204/254 is configured to generate a clock pulse pclk. The pulse clock module has a first pulse-clock-module input, a second pulse-clock-module input, and a pulse-clock-module output. The first pulse-clock-module input is coupled to the clock clk. The second pulse-clock-module input is coupled to the latch-module output Q. For example, for the pulse generator 200, the second pulse-clock-module input is connected directly to the latch-module output Q. For another example, for the pulse generator 250, the second pulse-clock-module input is connected indirectly to the latch-module output Q through the delay module 256. The delay module 206/256 is configured to delay the clock pulse at the second latch-module input R. The delay module 206/256 has a delay module input and a delay module output. The delay module 206/256 is coupled between the latch-module output Q and the second pulse-clock-module input (see FIG. 2B) or between the pulse-clock-module output and the second latch-module input R (see FIG. 2A). The delay module 206/256 is configured to provide functionally I₁I_(A) at the delay module output, where h is a function of I and I_(A) is a function of I_(NO) and B₀ (e.g., bit₀), and where I is the delay module input in, B₀ is a first input bit, and I_(N0) 308/412 is a first net input. The function I₁I_(A) is the inversion of the result of a logical AND between I₁ and I_(A) (the AND operation is the same as Λ). As such, I₁I_(A) is the same as I₁ΛI_(A) . Generally, AB is logically the same as Ā+B, and A+B is the same as ĀB (the symbol “+” is an OR operation, and is the same as

). As such, I₁I_(A) is the same as I₁ +I_(A) .

Referring to FIG. 4, in one configuration, I_(A)=I₂I₃, the delay module 206/256 through the NAND gate 402 is configured to provide functionally I₁I₂I₃ at the delay module output, where I₁=I (e.g., I₁ is the input in), I₂=I_(N0)+B₀ (where B₀ is bit₀), and I₃=I_(N1)+B₁ (where B₁ is bit₁). Here, B₀ is a first input bit, I_(N0) 412 is a first net input, B₁ is a second input bit, and I_(N1) 414 is a second net input. As shown in FIG. 4, the first net input I_(N0) 412 is functionally I (in) and the second net input I_(N1) is functionally I+B₀. In addition, the delay module 206/256 is configured to provide functionally I₁=I with a delay d₁, functionally I₂=I+B₀ with a delay d₂, and functionally I₃=I+B₀+B₁ with a delay d₃, where the delay d₂ is greater than the delay d₁, and the delay d₃ is greater than the delay d₂. Specifically, ignoring metal interconnect delays, the delay d₁ is approximately equal to zero, the delay d₂ is approximately equal to a delay 2d_(G), and the delay d₃ is approximately equal to a delay 4d_(G), where the delay d_(G) is an approximate delay through a logic gate, such as the logic gates 404, 406, 408, 410. The delay module is configured to provide the delay d_(G) (through the NAND gate 402) when the first input bit B₀ is set to the second state (e.g., high (1)), to provide the delay 3d_(G) (through the NOR gate 404, the inverter 406, and the NAND gate 402) when the first input bit B₀ is set to the first state (e.g., low (0)) and the second input bit B₁ is set to the second state (e.g., high (1)), and to provide the delay 5d_(G) (through the NOR gate 404, the inverter 406, the NOR gate 408, the inverter 410, and the NAND gate 402) when the first input bit B₀ and the second input bit B₁ are set to the first state (e.g., low (0)).

As shown in FIG. 4, the first net input I_(N0) may be functionally equal to I if the first net input I_(N0) is maintained with a connection to the input in. Further, through an ECO, the second net input I_(N1) may be disconnected from receiving the input in, and both the second net input I_(N1) and the second input bit B₁ (bit₁) may be set to the second state (e.g., high (1)). In such a configuration, the delay module is configured to provide functionally I₁=I with a delay d₁, functionally I₂=I+B₀ with a delay d₂, and functionally I₃ equal to the second state with no delay, where the delay d₂ is greater than the delay d₁.

As shown in FIG. 4, through an ECO, first net input I_(N0) may be disconnected from receiving the input in, and the first net input I_(N0) and the first input bit B₀ may be set to the second state (e.g., high (1)). Further, the second net input I_(N1) and the second bit control B₁ may be set to the second state (e.g., high (1)). In one example, the second net input I_(N1) may be at the second state (e.g., high (1)) because the second net input I_(N1) receives the input in+B₀. In another example, through an ECO, the second net input I_(N1) is disconnected from input in+B₀ and is connected to the second state (e.g., high (1)). In such a configuration, the delay module is configured to provide functionally I₁=I with a delay d₁, functionally I₂ equal to the second state with no delay, and functionally I₃ equal to the second state with no delay.

In one configuration, the delay module includes a first set of gates (e.g., NAND gate 402) configured to combine the functional inputs I₁, I₂, and I₃. The first set of gates has a first input, a second input, and a third input. The first input is coupled to one of the latch-module output (see FIG. 2B) or the pulse-clock-module output (see FIG. 2A). The first input is configured to provide the functional input I₁. The delay module further includes a second set of gates (e.g., NOR gate 404 and inverter 406) configured to generate the functional input I₂. The second set of gates has an output coupled to the second input of the first set of gates. The second set of gates has an input coupled to the first input bit B₀ (bit₀). The delay module further includes a third set of gates (e.g., NOR gate 408 and inverter 410) configured to generate the functional input I₃. The third set of gates has an output coupled to the third input of the first set of gates. The third set of gates has an input coupled to the second input bit B₁ (bit₁). In one configuration, with both branch net I_(N0) 412 and branch net I_(N1) 414 connected, the third set of gates has an additional input I_(N1) 414 coupled to the output of the second set of gates, and the second set of gates has an additional input I_(N0) 412 coupled to the first input of the first set of gates. In one configuration, with branch net I_(N0) 412 connected and branch net I_(N1) 414 disconnected, the third set of gates has an additional input I_(N1) 414 set to the second state (e.g., high (1)), the second input bit B₁ (bit₁) is set to the second state (e.g., high (1)), and the second set of gates has an additional input I_(N0) 412 coupled to the first input of the first set of gates. In one configuration, with branch net I_(N0) 412 disconnected (branch net I_(N1) 414 may or may not be disconnected), the third set of gates has an additional input I_(N1) 414 set to the second state (e.g., high (1)), the second input bit B₁ (bit₁) is set to the second state (e.g., high (1)), the second set of gates has an additional input I_(N0) 412 set to the second state (e.g., high (1)), and the first input bit B₀ (bit₀) is set to the second state (e.g., high (1)).

As shown in FIG. 4, the first set of gates includes the NAND gate 402. The second set of gates includes an inverter 406 coupled between the second input of the first set of gates and a first node, and includes a NOR gate 404 having a NOR gate output coupled to the first node and NOR gate inputs coupled to the first input bit B₀ and the first net input I_(N0) 412. The third set of gates includes an inverter 410 coupled between the third input of the first set of gates and a first node, and a NOR gate 408 having a NOR gate output coupled to the first node and NOR gate inputs coupled to the second input bit B₁ and the second net input I_(N1) 414.

In one configuration, as shown in FIG. 2A, the latch-module output is coupled to the second pulse-clock-module input, the pulse-clock-module output is coupled to the delay module input, the delay module output is coupled to an input of an inverter 210, and an output of the inverter 210 is coupled to the second latch-module input. In one configuration, as shown in FIG. 2B, the latch-module output is coupled to the delay module input, the delay module output is coupled to the second pulse-clock-module input, and the pulse-clock-module output is coupled to the second latch-module input. In such a configuration, the latch-module output Q is inverted. As shown in both FIGS. 2A, 2B, the latch module is an SR latch, the first latch-module input S is an inverted set (S) input of the SR latch, and the second latch-module input R is a reset (R) input of the SR latch.

Referring again to FIGS. 2A, 2B, 3, and 4, a pulse generator 200/250 includes a latch module 202/252, a pulse clock module 204/254, and a delay module 206/256. The latch module 202/252 is configured to store a first state (e.g., low (0)) or a second state (e.g., high (1)). The latch module 202/252 has a first latch-module input S, a second latch-module input R, and a latch-module output Q. The first latch-module input S is coupled to a clock clk. The pulse clock module is configured to generate a clock pulse pclk. The pulse clock module has a first pulse-clock-module input, a second pulse-clock-module input, and a pulse-clock-module output. The first pulse-clock-module input is coupled to the clock clk. The second pulse-clock-module input is coupled to the latch-module output Q. For example, for the pulse generator 200, the second pulse-clock-module input is connected directly to the latch-module output Q. For another example, for the pulse generator 250, the second pulse-clock-module input is connected indirectly to the latch-module output Q through the delay module 256. The delay module 206/256 is configured to delay a signal in order to delay the clock pulse pclk at the second latch-module input R. The delay module has a delay module input and a delay module output. The delay module is coupled between the latch-module output and the second pulse-clock-module input (see FIG. 2B) or between the pulse-clock-module output and the second latch-module input (see FIG. 2A). The delay module includes at least two delay paths (see FIGS. 3, 4) configured to delay the clock pulse pclk to the second latch-module input R. The delay module further includes one or more logic gates (e.g., NAND gate 302/402) configured to change a state of the delay module output after the signal has propagated through each of the at least two delay paths to the one or more logic gates. The state of the delay module output is a function of each of the at least two delay paths.

The delay module 300 of FIG. 3 includes 10 transistors, which is less than the number of transistors used (14) when one or more multiplexers are used in the implementation. Further, the delay module 400 of FIG. 4 includes 18 transistors, which is less than the number of transistors used (26) when one or more multiplexers are used in the implementation. As such, the delay modules 300, 400 are more area efficient that multiplexer implemented delay modules. The delay modules 300, 400 allow for adjustment of a delay by setting one or more bits. The delays may be adjusted to increase a pulse width to improve a write-margin or to decrease a pulse width to improve a hold-margin. Further, the delay modules 300, 400 allow for changes through ECO after determining an optimum delay setting. Thereafter, after the ECO, SoCs may be manufactured with the optimal delay setting. Delay modules are provided with one-bit control (FIG. 3) and two-bit control (FIG. 4). However, from the description supra, it would be clear to one of ordinary skill in the art that a delay module may have n-bit control with n+1 delay paths.

It is understood that the specific order or hierarchy of steps in the processes disclosed is an illustration of exemplary approaches. Based upon design preferences, it is understood that the specific order or hierarchy of steps in the processes may be rearranged. Further, some steps may be combined or omitted. The accompanying method claims present elements of the various steps in a sample order, and are not meant to be limited to the specific order or hierarchy presented.

The previous description is provided to enable any person skilled in the art to practice the various aspects described herein. Various modifications to these aspects will be readily apparent to those skilled in the art, and the generic principles defined herein may be applied to other aspects. Thus, the claims are not intended to be limited to the aspects shown herein, but is to be accorded the full scope consistent with the language claims, wherein reference to an element in the singular is not intended to mean “one and only one” unless specifically so stated, but rather “one or more.” The word “exemplary” is used herein to mean “serving as an example, instance, or illustration.” Any aspect described herein as “exemplary” is not necessarily to be construed as preferred or advantageous over other aspects.” Unless specifically stated otherwise, the term “some” refers to one or more. Combinations such as “at least one of A, B, or C,” “at least one of A, B, and C,” and “A, B, C, or any combination thereof” include any combination of A, B, and/or C, and may include multiples of A, multiples of B, or multiples of C. Specifically, combinations such as “at least one of A, B, or C,” “at least one of A, B, and C,” and “A, B, C, or any combination thereof” may be A only, B only, C only, A and B, A and C, B and C, or A and B and C, where any such combinations may contain one or more member or members of A, B, or C. The term “connected” means “directly connected.” The term “coupled” means “connected” or “indirectly connected” through other elements. All structural and functional equivalents to the elements of the various aspects described throughout this disclosure that are known or later come to be known to those of ordinary skill in the art are expressly incorporated herein by reference and are intended to be encompassed by the claims. Moreover, nothing disclosed herein is intended to be dedicated to the public regardless of whether such disclosure is explicitly recited in the claims. No claim element is to be construed as a means plus function unless the element is expressly recited using the phrase “means for.” 

What is claimed is:
 1. A pulse generator, comprising: a latch module configured to store a first state or a second state, the latch module having a first latch-module input, a second latch-module input, and a latch-module output, the first latch-module input being coupled to a clock; a pulse clock module configured to generate a clock pulse, the pulse clock module having a first pulse-clock-module input, a second pulse-clock-module input, and a pulse-clock-module output, the first pulse-clock-module input being coupled to the clock, the second pulse-clock-module input being coupled to the latch-module output; and a delay module configured to delay the clock pulse at the second latch-module input, the delay module having a delay module input and a delay module output, the delay module being coupled between the latch-module output and the second pulse-clock-module input or between the pulse-clock-module output and the second latch-module input, wherein the delay module is configured to provide functionally I₁I_(A) at the delay module output, where I₁ is a function of I and I_(A) is a function of I_(N0) and B₀, and where I is the delay module input, B₀ is a first input bit, and I_(N0) is a first net input, wherein the delay module includes a first set of gates comprising a NOR gate and an inverter, the NOR gate having NOR gate inputs coupled to the first input bit B₀ and the first net input I_(N0), and a NOR gate output coupled to the inverter.
 2. The pulse generator of claim 1, wherein I_(A)=I₂I₃, the delay module is configured to provide functionally I₁I₂I₃ at the delay module output, where I₁=I, I₂=I_(N0)+B₀, and I₃=I_(N1)+B₁, and where B₁ is a second input bit and I_(N1) is a second net input.
 3. The pulse generator of claim 2, wherein the first net input I_(N0) is functionally I and the second net input I_(N1) is functionally I+B₀, and wherein the delay module is configured to provide functionally I₁=I with a delay d₁, functionally I₂=I+B₀ with a delay d₂, and functionally I₃=I+B₀+B₁ with a delay d₃, where the delay d₂ is greater than the delay d₁, and the delay d₃ is greater than the delay d₂.
 4. The pulse generator of claim 3, wherein the delay d₁ is approximately equal to zero, the delay d₂ is approximately equal to a delay 2d_(G), and the delay d₃ is approximately equal to a delay 4d_(G), and wherein the delay d_(G) is an approximate delay through a logic gate.
 5. The pulse generator of claim 4, wherein the delay module is configured to provide the delay d_(G) when the first input bit B₀ is set to the second state, to provide the delay 3d_(G) when the first input bit B₀ is set to the first state and the second input bit B₁ is set to the second state, and to provide the delay 5d_(G) when the first input bit B₀ and the second input bit B₁ are set to the first state.
 6. The pulse generator of claim 2, wherein: the first net input I_(N0) is functionally equal to I; the second net input I_(N1) and the second input bit B₁ are set to the second state; and the delay module is configured to provide functionally I₁=I with a delay d₁, functionally I₂=I+B₀ with a delay d₂, and functionally I₃ equal to the second state with no delay, where the delay d₂ is greater than the delay d₁.
 7. The pulse generator of claim 2, wherein: the first net input I_(N0) and the first input bit B₀ are set to the second state; the second net input I_(N1) and the second bit control B₁ are set to the second state; and the delay module is configured to provide functionally I₁=I with a delay d₁, functionally I₂ equal to the second state with no delay, and functionally I₃ equal to the second state with no delay.
 8. The pulse generator of claim 2, wherein the delay module further comprises: a second set of gates configured to combine the functional inputs I₁, I₂, and I₃, the second set of gates having a first input, a second input, and a third input, the first input being coupled to one of the latch-module output or the pulse-clock-module output, the first input being configured to provide the functional input I₁; a third set of gates configured to generate the functional input I₃, the third set of gates having an output coupled to the third input of the second set of gates, the third set of gates having an input coupled to the second input bit B₁; wherein the first set of gates is configured to generate the functional input I₂, the first set of gates having an output coupled to the second input of the second set of gates, the first set of gates having an input coupled to the first input bit B₀.
 9. The pulse generator of claim 8, wherein the third set of gates has an additional input coupled to the output of the first set of gates, and the first set of gates has an additional input coupled to the first input of the second set of gates.
 10. The pulse generator of claim 8, wherein the third set of gates has an additional input set to the second state, the second input bit B₁ is set to the second state, and the first set of gates has an additional input coupled to the first input of the second set of gates.
 11. The pulse generator of claim 8, wherein the third set of gates has an additional input set to the second state, the second input bit B₁ is set to the second state, the first set of gates has an additional input set to the second state, and the first input bit B₀ is set to the second state.
 12. The pulse generator of claim 8, wherein the second set of gates comprises a NAND gate.
 13. (canceled)
 14. A pulse generator, comprising: a latch module configured to store a first state or a second state, the latch module having a first latch-module input, a second latch-module input, and a latch-module output, the first latch-module input being coupled to a clock; a pulse clock module configured to generate a clock pulse, the pulse clock module having a first pulse-clock-module input, a second pulse-clock-module input, and a pulse-clock-module output, the first pulse-clock-module input being coupled to the clock, the second pulse-clock-module input being coupled to the latch-module output; and a delay module configured to delay the clock pulse at the second latch-module input, the delay module having a delay module input and a delay module output, the delay module being coupled between the latch-module output and the second pulse-clock-module input or between the pulse-clock-module output and the second latch-module input, wherein the delay module is configured to provide functionally I₁I_(A) at the delay module output, where I₁ is a function of I and I_(A) is a function of I_(N0) and B₀, and where I is the delay module input, B₀ is a first input bit, and I_(N0) is a first net input, wherein the delay module comprises: a first set of gates configured to combine the functional inputs I₁, I₂, and I₃, the first set of gates having a first input, a second input, and a third input, the first input being coupled to one of the latch-module output or the pulse-clock-module output, the first input being configured to provide the functional input I₁; a second set of gates configured to generate the functional input I₂, the second set of gates having an output coupled to the second input of the first set of gates, the second set of gates having an input coupled to the first input bit B₀; and a third set of gates configured to generate the functional input I₃, the third set of gates having an output coupled to the third input of the first set of gates, the third set of gates having an input coupled to the second input bit B₁, wherein the third set of gates comprise an inverter coupled between the third input of the first set of gates and a first node, and a NOR gate having a NOR gate output coupled to the first node and NOR gate inputs coupled to the second input bit B₁ and the second net input I_(N1).
 15. A pulse generator, comprising: a latch module configured to store a first state or a second state, the latch module having a first latch-module input, a second latch-module input, and a latch-module output, the first latch-module input being coupled to a clock; a pulse clock module configured to generate a clock pulse, the pulse clock module having a first pulse-clock-module input, a second pulse-clock-module input, and a pulse-clock-module output, the first pulse-clock-module input being coupled to the clock, the second pulse-clock-module input being coupled to the latch-module output; and a delay module configured to delay the clock pulse at the second latch-module input, the delay module having a delay module input and a delay module output, the delay module being coupled between the latch-module output and the second pulse-clock-module input or between the pulse-clock-module output and the second latch-module input, wherein the delay module is configured to provide functionally I₁I_(A) at the delay module output, where I₁ is a function of I and I_(A) is a function of I_(N0) and B₀, and where I is the delay module input, B₀ is a first input bit, and I_(N0) is a first net input, wherein the delay module comprises: a first set of gates configured to combine the functional inputs I₁, I₂, and I₃, the first set of gates having a first input, a second input, and a third input, the first input being coupled to one of the latch-module output or the pulse-clock-module output, the first input being configured to provide the functional input I₁; a second set of gates configured to generate the functional input I₂, the second set of gates having an output coupled to the second input of the first set of gates, the second set of gates having an input coupled to the first input bit B₀; and a third set of gates configured to generate the functional input I₃, the third set of gates having an output coupled to the third input of the first set of gates, the third set of gates having an input coupled to the second input bit B₁, wherein the latch-module output is coupled to the second pulse-clock-module input, the pulse-clock-module output is coupled to the delay module input, the delay module output is coupled to an input of an inverter, and an output of the inverter is coupled to the second latch-module input.
 16. The pulse generator of claim 8, wherein the latch-module output is coupled to the delay module input, the delay module output is coupled to the second pulse-clock-module input, and the pulse-clock-module output is coupled to the second latch-module input.
 17. The pulse generator of claim 16, wherein the latch-module output is inverted.
 18. The pulse generator of claim 1, wherein the latch module is a set-reset (SR) latch, the first latch-module input is an inverted set input of the SR latch, and the second latch-module input is a reset input of the SR latch.
 19. A pulse generator, comprising: a latch module configured to store a first state or a second state, the latch module having a first latch-module input, a second latch-module input, and a latch-module output, the first latch-module input being coupled to a clock; a pulse clock module configured to generate a clock pulse, the pulse clock module having a first pulse-clock-module input, a second pulse-clock-module input, and a pulse-clock-module output, the first pulse-clock-module input being coupled to the clock, the second pulse-clock-module input being coupled to the latch-module output; and a delay module configured to delay a signal in order to delay the clock pulse at the second latch-module input, the delay module having a delay module input and a delay module output, the delay module being coupled between the latch-module output and the second pulse-clock-module input or between the pulse-clock-module output and the second latch-module input, wherein the delay module comprises: at least two delay paths configured to delay the clock pulse to the second latch-module input; and one or more logic gates configured to change a state of the delay module output after the signal has propagated through each of the at least two delay paths to the one or more logic gates, the state of the delay module output being a function of each of the at least two delay paths, wherein the latch module output is coupled to the second pulse clock module input, the pulse clock module output is coupled to the delay module input, the delay module output is coupled to an input of an inverter, and an output of the inverter is coupled to the second latch module input.
 20. The pulse generator of claim 19, wherein a delay d₁ through a first delay path of the at least two delay paths is approximately equal to zero, and a delay d₂ through a second delay path of the at least two delay paths is approximately equal to a delay 2d_(G), and wherein the delay d_(G) is an approximate delay through a logic gate.
 21. The pulse generator of claim 19, wherein the delay module is configured to provide functionally I₁I_(A) at the delay module output, where I₁ is provided through a first delay path of the at least two delay paths and I_(A) is provided through one or more additional delay paths of the at least two delay paths, where I₁ is a function of I and I_(A) is a function of I_(N0) and B₀, and where I is the delay module input, B₀ is a first input bit, and I_(N0) is a first net input.
 22. The pulse generator of claim 21, wherein the at least two delay paths comprise three delay paths that are configured to delay the clock pulse to the second latch-module input.
 23. The pulse generator of claim 22, wherein I_(A)=I₂I₃, the delay module is configured to provide functionally I₁I₂I₃ at the delay module output, where I₂ is provided through a second delay path of the at least three delay paths and I₃ is provided through a third delay path of the at least three delay paths, where I₁=I, I₂=I_(N0)+B₀, and I₃=I_(N1)+B₁, and where B₁ is a second input bit and I_(N1) is a second net input.
 24. The pulse generator of claim 22, wherein a delay d₁ through a first delay path of the at least three delay paths is approximately equal to zero, a delay d₂ through a second delay path of the at least three delay paths is approximately equal to a delay 2d_(G), and a delay d₃ through a third delay path of the at least three delay paths is approximately equal to a delay 4d_(G), and wherein the delay d_(G) is an approximate delay through a logic gate.
 25. The pulse generator of claim 22, wherein a first delay path of the at least three delay paths is a function of the clock pulse, a second delay path of the at least three delay paths is a function of a first net input I_(N0) and a first input bit B₀, and a third delay path of the at least three delay paths is a function of a second net input I_(N1) and a second input bit B₁.
 26. The pulse generator of claim 25, wherein the first net input I_(N0) is functionally I and the second net input I_(N1) is functionally I+B₀, and wherein the delay module is configured to provide functionally I₁=I with a delay d₁, functionally I₂=I+B₀ with a delay d₂, and functionally I₃=I+B₀+B₁ with a delay d₃, where the delay d₂ is greater than the delay d₁, and the delay d₃ is greater than the delay d₂.
 27. The pulse generator of claim 25, wherein: the first net input I_(N0) is functionally equal to I; the second net input I_(N1) and the second input bit B₁ are set to the second state; and the delay module is configured to provide functionally I₁=I with a delay d₁, functionally I₂=I+B₀ with a delay d₂, and functionally I₃ equal to the second state with no delay, where the delay d₂ is greater than the delay d₁.
 28. The pulse generator of claim 25, wherein: the first net input I_(N0) and the first input bit B₀ are set to the second state; the second net input I_(N1) and the second bit control B₁ are set to the second state; and the delay module is configured to provide functionally I₁=I with a delay d₁, functionally I₂ equal to the second state with no delay, and functionally I₃ equal to the second state with no delay.
 29. (canceled)
 30. The pulse generator of claim 19, wherein the latch-module output is coupled to the delay module input, the delay module output is coupled to the second pulse-clock-module input, and the pulse-clock-module output is coupled to the second latch-module input. 